| package |
package := Package name: 'TpObjetos'.
package paxVersion: 1;
	basicComment: ''.


package classNames
	add: #Colectivo;
	add: #Esfera;
	add: #Guerrero;
	add: #Liviano;
	add: #Monstruo;
	add: #Poder;
	add: #Saiyajin;
	add: #Terricola;
	add: #TrabajoPractico;
	add: #Traje;
	add: #TrajeReforzado;
	add: #Vengativo;
	yourself.

package binaryGlobalNames: (Set new
	yourself).

package globalAliases: (Set new
	yourself).

package setPrerequisites: (IdentitySet new
	add: 'Dolphin Smalltalk X6\Object Arts\Dolphin\Base\Dolphin';
	yourself).

package!

"Class Definitions"!

Object subclass: #TrabajoPractico
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
TrabajoPractico subclass: #Esfera
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
TrabajoPractico subclass: #Guerrero
	instanceVariableNames: 'vida energia traje nivelPelea aliados semillas poder bando energiainicial vidainicial'
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
TrabajoPractico subclass: #Poder
	instanceVariableNames: 'nivelDeAtaque'
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
TrabajoPractico subclass: #Traje
	instanceVariableNames: 'LoUsa'
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
Guerrero subclass: #Monstruo
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
Guerrero subclass: #Saiyajin
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
Guerrero subclass: #Terricola
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
Poder subclass: #Colectivo
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
Poder subclass: #Liviano
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
Poder subclass: #Vengativo
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
Traje subclass: #TrajeReforzado
	instanceVariableNames: 'pts'
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!

"Global Aliases"!


"Loose Methods"!

"End of package definition"!

"Source Globals"!

"Classes"!

TrabajoPractico guid: (GUID fromString: '{EEDC21E2-1080-4EEE-A0BC-266F176894B0}')!
TrabajoPractico comment: ''!
!TrabajoPractico categoriesForClass!Unclassified! !
Esfera guid: (GUID fromString: '{FA76685C-B4D6-49AA-8374-2CC9520CB3BE}')!
Esfera comment: ''!
!Esfera categoriesForClass!Unclassified! !
Guerrero guid: (GUID fromString: '{48AF83C3-FA5C-4B11-9C09-5762675D87A6}')!
Guerrero comment: ''!
!Guerrero categoriesForClass!Unclassified! !
!Guerrero methodsFor!

AgregaAliado:Pje
aliados add:Pje.!

Atacado:puntos

self PerderVida: (puntos-((self Tutraje)resiste: puntos)-self resiste:puntos).!

Bando: w
bando:=w.!

CantidadAliadosBuenos
^((aliados select: [:unbueno |  (unbueno TuBando)='Bueno'])size)!

CantidadAliadosMalos
^((aliados select: [:unmalo |  (unmalo TuBando)='Malo'])size)
!

ComerSemilla
(self PuedeComerSemillas)!

Energia:E
energia:=E.
energiainicial:=E.!

GanarEnergia:E
energia:=energia+E.!

GanarNivel:N
nivelPelea:=nivelPelea+N.!

GanaSemilla
semillas:=semillas+1!

inicializo
aliados:=Set new.!

Moribundo
^(vida <=50).!

Muerto
^(energia=0)!

Nivel:N
nivelPelea:=N.!

PedirSemilla
!

PerderVida:E
vida:=vida-E.
!

PierdeSemilla
semillas:=semillas-1!

Poder:P
poder:=P.!

PuedeComerSemillas
^(((self TusSemillas~=0)| (self PuedePedirSemillas)) &((self Moribundo )| energia<200  ))!

PuedeDarSemilla
(self TuBando='Bueno') ifTrue: [^(self PuedeDarSemillaBueno) ] ifFalse: [^(self PuedeDarSemillaMalo) ]!

PuedeDarSemillaBueno
^((self TuBando='Bueno')&(self TusSemillas >0))
 !

PuedeDarSemillaMalo
^((self TuBando='Malo')&(self TusSemillas >1))!

PuedePedirSemillas
aliados anySatisfy: [:each | each PuedeDarSemilla]!

SeHaceAliadoDe:Pje
((self PuedeAliarse:Pje)&&(Pje PuedeAliarse: self)) ifTrue: [self AgregaAliado: Pje.
                                                                                      Pje AgregaAliado: self.    ] !

Semillas:S
semillas:=S.!

Traje:T
traje:=T.!

TuBando
^bando.!

Tuenergia
^energia.!

Tunivel
^nivelPelea!

Tupoder
^poder.!

TusSemillas
^semillas!

Tutraje
^traje.!

Vida:V
vida:=V.
vidainicial:=V.! !
!Guerrero categoriesFor: #AgregaAliado:!public! !
!Guerrero categoriesFor: #Atacado:!public! !
!Guerrero categoriesFor: #Bando:!public! !
!Guerrero categoriesFor: #CantidadAliadosBuenos!public! !
!Guerrero categoriesFor: #CantidadAliadosMalos!public! !
!Guerrero categoriesFor: #ComerSemilla!public! !
!Guerrero categoriesFor: #Energia:!public! !
!Guerrero categoriesFor: #GanarEnergia:!public! !
!Guerrero categoriesFor: #GanarNivel:!public! !
!Guerrero categoriesFor: #GanaSemilla!public! !
!Guerrero categoriesFor: #inicializo!public! !
!Guerrero categoriesFor: #Moribundo!public! !
!Guerrero categoriesFor: #Muerto!public! !
!Guerrero categoriesFor: #Nivel:!public! !
!Guerrero categoriesFor: #PedirSemilla!public! !
!Guerrero categoriesFor: #PerderVida:!public! !
!Guerrero categoriesFor: #PierdeSemilla!public! !
!Guerrero categoriesFor: #Poder:!public! !
!Guerrero categoriesFor: #PuedeComerSemillas!public! !
!Guerrero categoriesFor: #PuedeDarSemilla!public! !
!Guerrero categoriesFor: #PuedeDarSemillaBueno!public! !
!Guerrero categoriesFor: #PuedeDarSemillaMalo!public! !
!Guerrero categoriesFor: #PuedePedirSemillas!public! !
!Guerrero categoriesFor: #SeHaceAliadoDe:!public! !
!Guerrero categoriesFor: #Semillas:!public! !
!Guerrero categoriesFor: #Traje:!public! !
!Guerrero categoriesFor: #TuBando!public! !
!Guerrero categoriesFor: #Tuenergia!public! !
!Guerrero categoriesFor: #Tunivel!public! !
!Guerrero categoriesFor: #Tupoder!public! !
!Guerrero categoriesFor: #TusSemillas!public! !
!Guerrero categoriesFor: #Tutraje!public! !
!Guerrero categoriesFor: #Vida:!public! !

Poder guid: (GUID fromString: '{F36041B8-4813-4F59-B777-9C7DBCC186AB}')!
Poder comment: ''!
!Poder categoriesForClass!Unclassified! !
!Poder methodsFor!

nivelDeAtaque
	^nivelDeAtaque!

nivelDeAtaque: unNivelDeAtaque
	nivelDeAtaque:= unNivelDeAtaque! !
!Poder categoriesFor: #nivelDeAtaque!public! !
!Poder categoriesFor: #nivelDeAtaque:!public! !

Traje guid: (GUID fromString: '{4B06DE83-5972-45CF-8C82-6AA8801296E1}')!
Traje comment: ''!
!Traje categoriesForClass!Unclassified! !
!Traje methodsFor!

LotienePuesto:P
LoUsa:=P.!

Quienlotienepuesto
^LoUsa!

resiste:puntos
^((puntos*10)/100)! !
!Traje categoriesFor: #LotienePuesto:!public! !
!Traje categoriesFor: #Quienlotienepuesto!public! !
!Traje categoriesFor: #resiste:!public! !

Monstruo guid: (GUID fromString: '{3104EAEC-380C-4D4E-AAEB-9A5C7BBB7F3B}')!
Monstruo comment: ''!
!Monstruo categoriesForClass!Unclassified! !
!Monstruo methodsFor!

ComeSemilla
vida:=vidainicial.
self GanarEnergia: ((self Tunivel*5)/100).
self PierdeSemilla.
!

PuedeAliarse:pje
^((pje Tunivel)>=5000 )!

resiste:puntos
^(20).! !
!Monstruo categoriesFor: #ComeSemilla!public! !
!Monstruo categoriesFor: #PuedeAliarse:!public! !
!Monstruo categoriesFor: #resiste:!public! !

!Monstruo class methodsFor!

new
| nuevo| 
nuevo:=super new.
nuevo Bando:'Malo'.
nuevo inicializo.
^nuevo.! !
!Monstruo class categoriesFor: #new!public! !

Saiyajin guid: (GUID fromString: '{E8D3F979-17CE-4AE7-857B-DC45F44BCAD9}')!
Saiyajin comment: ''!
!Saiyajin categoriesForClass!Unclassified! !
!Saiyajin methodsFor!

ComeSemilla
vida:=vidainicial.
self GanarEnergia: (((self Tunivel*5)/100)+(aliados size)).
self PierdeSemilla
!

comparacion:W con:J
^(W>J).!

PuedeAliarse:Pje
(Pje TuBando='Malo') ifTrue: [^(self comparacion: (self CantidadAliadosMalos ) con:(self CantidadAliadosBuenos )) ].
(Pje TuBando='Bueno')ifTrue: [^(self comparacion: (self CantidadAliadosBuenos) con:(self CantidadAliadosMalos ))]. !

resiste:puntos
^((10*puntos/100)+(((self Tuenergia )*2)/100)).
! !
!Saiyajin categoriesFor: #ComeSemilla!public! !
!Saiyajin categoriesFor: #comparacion:con:!public! !
!Saiyajin categoriesFor: #PuedeAliarse:!public! !
!Saiyajin categoriesFor: #resiste:!public! !

!Saiyajin class methodsFor!

new
| nuevo |
nuevo:=Saiyajin new.
nuevo inicializo.
^nuevo. ! !
!Saiyajin class categoriesFor: #new!public! !

Terricola guid: (GUID fromString: '{D99005EF-E776-4BFF-A581-A5067C51EA36}')!
Terricola comment: ''!
!Terricola categoriesForClass!Unclassified! !
!Terricola methodsFor!

CantidadGuerrerosNivelMenor
^((aliados select: [:each | (each Tunivel)<15000 ])size)!

ComeSemilla
vida:=vidainicial.
self GanarEnergia: (((self Tunivel*5)/100)+200).
self PierdeSemilla.!

PuedeAliarse:Pje
^(((self CantidadGuerrerosNivelMenor)<5) & (Pje TuBando='Bueno')).!

resiste:puntos
^((puntos*5)/100)! !
!Terricola categoriesFor: #CantidadGuerrerosNivelMenor!public! !
!Terricola categoriesFor: #ComeSemilla!public! !
!Terricola categoriesFor: #PuedeAliarse:!public! !
!Terricola categoriesFor: #resiste:!public! !

!Terricola class methodsFor!

new
| nuevo| 
nuevo:=super new.
nuevo Bando:'Bueno'.
nuevo inicializo.
^nuevo.
! !
!Terricola class categoriesFor: #new!public! !

Colectivo guid: (GUID fromString: '{83656D5C-50A4-4158-8B6A-2A60AB57B3E4}')!
Colectivo comment: ''!
!Colectivo categoriesForClass!Unclassified! !
Liviano guid: (GUID fromString: '{76207371-40AE-4790-A8A7-0888F3EB4B08}')!
Liviano comment: ''!
!Liviano categoriesForClass!Unclassified! !
Vengativo guid: (GUID fromString: '{9873A2FE-0286-4ABE-8AA4-3D2E23C69E30}')!
Vengativo comment: ''!
!Vengativo categoriesForClass!Unclassified! !
TrajeReforzado guid: (GUID fromString: '{DD4ECDC9-3184-4BD1-8F43-0989803F6BE7}')!
TrajeReforzado comment: ''!
!TrajeReforzado categoriesForClass!Unclassified! !
!TrajeReforzado methodsFor!

resiste:puntos
^(((puntos*12)/100)+pts )!

resistencia
^pts!

resistencia:ptsfijos
pts:=ptsfijos.
! !
!TrajeReforzado categoriesFor: #resiste:!public! !
!TrajeReforzado categoriesFor: #resistencia!public! !
!TrajeReforzado categoriesFor: #resistencia:!public! !

"Binary Globals"!

